// destructors
#include <iostream>
#include <string>
using namespace std;

class Demo1 {
    typedef struct _dataBase {
    } DataBase;
    string* ptr;
    DataBase my_data;
  public:
    // constructors:
    Demo1() : ptr(new string) {}
    Demo1 (const string& str) : ptr(new string(str)) {}
    Demo1 (string&& str) : ptr(new string(str)) {}
    // destructor:
    ~Demo1 () {delete ptr;}
    // access content:
    const string& content() const {return *ptr;}
};

int main () {
  string s1("1");
  Demo1 bar (std::move(s1));
	
  //Demo1 bar (static_cast<typename remove_reference<string>::type&&>(s1));
  //Demo1 bar (s1);
	
}
